package com.joyxy.spider.mapscript.operation;

/**
 * 水平移动操作
 * 操作数: 1
 * 参数: XMin/XMax/YMin/YMax/X
 */
public class HorizontalMoveOperation extends BaseOperation {
    /** 执行区域最小横坐标 */
    private int xMin;
    /** 执行区域最大横坐标 */
    private int xMax;
    /** 执行区域最小纵坐标 */
    private int yMin;
    /** 执行区域最大纵坐标 */
    private int yMax;
    /** 目标位置横坐标 */
    private int targetX;
    
    public HorizontalMoveOperation(int xMin, int xMax, int yMin, int yMax, int targetX) {
        super(1, "水平移动");
        this.xMin = xMin;
        this.xMax = xMax;
        this.yMin = yMin;
        this.yMax = yMax;
        this.targetX = targetX;
    }
    
    /**
     * 从参数数组创建水平移动操作
     */
    public static HorizontalMoveOperation fromParameters(int[] parameters) {
        if (parameters == null || parameters.length < 5) {
            throw new IllegalArgumentException("水平移动操作需要5个参数: XMin/XMax/YMin/YMax/X");
        }
        return new HorizontalMoveOperation(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4]);
    }
    
    @Override
    public void execute() {
        System.out.println("执行水平移动: 在区域(" + xMin + "," + yMin + ")-(" + xMax + "," + yMax + ") 移动到X=" + targetX);
        // 这里应该调用实际的移动逻辑
    }
    
    @Override
    public boolean isValid() {
        return xMin <= xMax && yMin <= yMax && targetX >= 0;
    }
    
    @Override
    public String getDetailInfo() {
        return String.format("水平移动: 执行区域(%d,%d,%d,%d) → 目标X坐标=%d", 
                xMin, xMax, yMin, yMax, targetX);
    }
    
    /**
     * 检查指定坐标是否在执行区域内
     */
    public boolean isInExecutionArea(int x, int y) {
        return x >= xMin && x <= xMax && y >= yMin && y <= yMax;
    }
    
    // Getter methods
    public int getxMin() { return xMin; }
    public int getxMax() { return xMax; }
    public int getyMin() { return yMin; }
    public int getyMax() { return yMax; }
    public int getTargetX() { return targetX; }
    
    @Override
    public String toString() {
        return String.format("HorizontalMove{area=(%d,%d,%d,%d), targetX=%d}", 
                xMin, xMax, yMin, yMax, targetX);
    }
} 